package com.sse.lb.core;

import java.util.Iterator;
import java.util.TreeMap;

/**
 * Implementacion del componente para las reglas de enrutamiento hacia los
 * servidores centrales.
 * 
 * @author Paul
 * 
 */
public class ReglasEnrutamiento implements IReglasEnrutamiento {

	private static final ReglasEnrutamiento instance = new ReglasEnrutamiento();

	private TreeMap<Long, Integer> reglas = new TreeMap<Long, Integer>();

	public static ReglasEnrutamiento getInstance() {
		return instance;
	}

	@Override
	public void registrarSistemaCentral(long idSistemaCentral) {
		reglas.put(idSistemaCentral, 0);
	}

	@Override
	public void adicionarUnaTrama(long idSistemaCentral) {
		if (reglas.containsKey(idSistemaCentral)){
			int valor = reglas.get(idSistemaCentral);
			reglas.put(idSistemaCentral, valor+1);
		}
	}

	@Override
	public void removerUnaTrama(long idSistemaCentral) {
		if (reglas.containsKey(idSistemaCentral)){
			int valor = reglas.get(idSistemaCentral);
			reglas.put(idSistemaCentral, valor-1);
		}
	}

	@Override
	public void eliminarSistemaCentral(long idSistemaCentral) {
		reglas.remove(idSistemaCentral);
	}

	@Override
	public long obtenerSistemaMenosCargado() {
		Iterator<Long> it = reglas.keySet().iterator();

		long scMenor = -1;
		int valorMenor = Integer.MAX_VALUE;
		while (it.hasNext()) {
			long aux = it.next();
			if (reglas.get(aux) < valorMenor) {
				scMenor = aux;
				valorMenor = reglas.get(aux);
			}
		}
//System.out.println(scMenor + ">>>" + valorMenor);
		return scMenor;
	}

}
